/********************************Copyright (c)**********************************\
**
**                   (c) Copyright 2019, Main, China, Mrtutu.
**                           All Rights Reserved
**
**                                By Mrtutu
**                           Blog: www.mrtutu.cn
**
**----------------------------------文件信息------------------------------------
** @flie    : oled.h
** @auther  : Mrtutu
** @date    : 2019-06-10
** @describe: 
**
**----------------------------------版本信息------------------------------------
** 版本代号: V0.1
** 版本说明: 初始版本
**
**------------------------------------------------------------------------------
\********************************End of Head************************************/
 
#ifndef __OLED_H_
#define __OLED_H_
#include "sys.h"

//F4
//#define SDA_IN()  {GPIOB->MODER&=~(3<<(9*2));GPIOC->MODER|=0<<9*2;}	//PB11输入模式
//#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOC->MODER|=1<<9*2;} //PB11输出模式

// F1
//SCL -- PB12
//SDA -- PB13
#define SDA_IN()     {GPIOB->CRH&=0XFF0FFFFF;GPIOB->CRH|=(u32)8<<20;}  // 输入上拉/下拉
#define SDA_OUT()    {GPIOB->CRH&=0XFF0FFFFF;GPIOB->CRH|=(u32)3<<20;}  // 复用推挽输出


//IO操作函数	 
#define IIC_SCL    PBout(12) //SCL
#define IIC_SDA    PBout(13) //SDA	 
#define READ_SDA   PBin(13)  //输入SDA 




//IIC所有操作函数
void IIC_Init(void);                //初始化IIC的IO口				 
void IIC_Start(void);				//发送IIC开始信号
void IIC_Stop(void);	  			//发送IIC停止信号
void IIC_Send_Byte(u8 txd);			//IIC发送一个字节
u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节
u8 IIC_Wait_Ack(void); 				//IIC等待ACK信号
void IIC_Ack(void);					//IIC发送ACK信号
void IIC_NAck(void);				//IIC不发送ACK信号
void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data);
u8 IIC_Read_One_Byte(u8 daddr,u8 addr);	  


//OLED控制用函数
static void OLED_BufToPanel(void);
void OLED_WR_Byte(uint8_t dat,uint8_t cmd);	  //写数据或者写命令   
void OLED_Display_On(void);   //开启OLED显示
void OLED_Display_Off(void);  //关闭OLED显示   
void OLED_SetDir(uint8_t _ucDir) ; //设置显示方向   0 表示正常方向，1表示翻转180度				   		    
void OLED_SetContrast(uint8_t ucValue); //设置对比度
void OLED_StartDraw(void) ; //开始绘图。以后绘图函数只改写缓冲区，不改写面板显存
void OLED_EndDraw(void) ; //结束绘图。缓冲区的数据刷新到面板显存。
void OLED_ClrScr(uint8_t _ucMode) ; //清屏
void OLED_PutPixel(uint16_t _usX, uint16_t _usY, uint8_t _ucColor) ; // 画1个像素
uint8_t OLED_GetPixel(uint16_t _usX, uint16_t _usY); // 读取1个像素
//采用 Bresenham 算法，在2点间画一条直线。
void OLED_DrawLine(uint16_t _usX1 , uint16_t _usY1 , uint16_t _usX2 , uint16_t _usY2 , uint8_t _ucColor) ;
// 采用 Bresenham 算法，绘制一组点，并将这些点连接起来。可用于波形显示。
void OLED_DrawPoints(uint16_t *x, uint16_t *y, uint16_t _usSize, uint8_t _ucColor);
//绘制矩形。
void OLED_DrawRect(uint16_t _usX, uint16_t _usY, uint8_t _usHeight, uint16_t _usWidth, uint8_t _ucColor);
//绘制一个圆，笔宽为1个像素
void OLED_DrawCircle(uint16_t _usX, uint16_t _usY, uint16_t _usRadius, uint8_t _ucColor);
//在LCD上显示一个BMP位图，位图点阵扫描次序：从左到右，从上到下
void OLED_DrawBMP(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint8_t *_ptr);
//初始化OLED			
void OLED_Init(void);

void OLED_ShowString(uint8_t x,uint8_t y,const uint8_t *p) ;

#endif

/********************************End of File************************************/